<?php
class Phorm_JQuery_View_Helper_SelectCanonical extends ZendX_JQuery_View_Helper_UiWidget {
	
	public function selectCanonical($name, $value = array(), $attribs = array(), $options = array()) {
		
		$curid = str_replace('[]','',$name);
		
		/**
		 * Обработка кликов на чекбоксах
		 */
		
		$js = '$("#' . $curid . ' input[type=checkbox]").on("click",function(){
			// Снимает курсор-руку с неотмеченных чекбоксов и вешаем его на отмеченные
			$("#' . $curid . ' label").css("cursor","default");
			$("#' . $curid . ' :checked").prev("label").css("cursor","pointer").attr("title","Нажмите, чтобы отметить раздел как главный");
			// Снимаем выделение с каноникала
			$("#' . $curid . ' label").removeClass("ui-state-active");
			// Проверяем сколько всего отмечено чекбоксов
			var x = $("#' . $curid . ' :checked").length;
			// Проверяем сколько отмечено чекбоксов в видимых и невидимых разделах
			var y = $("#' . $curid . ' .ui-state-disabled :checked").length;
			var z = x-y;
			// Получаем объект чекбокса текущего каноникала
			var c = $("#' . $curid . ' :checked[value="+$("#canonical").val()+"]");
			// Если выбрано больше одного и каноникалом не занято ни одного, то ставим каноникал на первый попавшийся чекбокс (мб только на видимый?)
			if(x>1 && $("#canonical").val()==0) {
				var m = $("#' . $curid . ' :checked:first");
				m.prev("label").addClass("ui-state-active");
				$("#canonical").val(m.val());
			// Если выбран один, то его и ставим каноникалом
			} else if(x==1) {
				var m = $("#' . $curid . ' :checked:first");
				m.prev("label").addClass("ui-state-active");
				$("#canonical").val(m.val());
			// Если каноникал слетел, то ставим его на первый попавшийся чекбокс
			} else if (!c.length) {
				var m = $("#' . $curid . ' :checked:first");
				m.prev("label").addClass("ui-state-active");
				$("#canonical").val(m.val());
			// Если не слетел, то подсвечиваем соответствующий чекбокс
			} else if (c.length) {
				c.prev("label").addClass("ui-state-active");
			// Если все условия пропущены, то ставим значение каноникала в ноль
			} else {
				$("#canonical").val(0);
			}
		});';
		
		$this->jquery->addOnLoad($js);
		
		/**
		 * Обработка кликов на лейблах
		 */
		
		$js = '$("#' . $curid . '").on("click","label",function(){
			   if($(this).next(":checked").length) {
				   $("#' . $curid . ' label").removeClass("ui-state-active");
				   $(this).addClass("ui-state-active");
				   $("#canonical").val($(this).next(":checked").val());
			   }
		});';
		
		$this->jquery->addOnLoad($js);
		
		/**
		 * Подсветка каноникала при загрузке страницы
		 * @todo Сделать подсветку если каноникал не установлен, а чекбоксы отмечены
		 */
		
		$js = '$("#' . $curid . ' :checkbox[value="+$("#canonical").val()+"]").prev("label").addClass("ui-state-active");';
		
		$this->jquery->addOnLoad($js);
		
		/**
		 * Расставляем курсоры на лейблах
		 */
		
		$js = '$("#' . $curid . ' label").css("cursor","default");
			   $("#' . $curid . ' :checked").prev("label").css("cursor","pointer").attr("title","Нажмите, чтобы отметить раздел как главный");';
		
		$this->jquery->addOnLoad($js);
		
		/**
		 * Возвращаем элемент formCategories
		 */
		
		return $this->view->formCategories($name,$value,$attribs,$options);
		
	}
	
}